/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002-2006
* Sleepycat Software. All rights reserved.
*
* $Id: EnvironmentStats.java,v 1.1 2006/05/06 08:59:27 ckaestne Exp $
*/
package com.sleepycat.je;
import java.io.Serializable;
import com.sleepycat.je.utilint.DbLsn;
/**
* Javadoc for this public class is generated
* via the doc templates in the doc_src directory.
*/
public class EnvironmentStats implements Serializable {
/* INCompressor */
/**
* The number of bins encountered by the INCompressor that were split
* between the time they were put on the compressor queue and when
* the compressor ran.
*/
private int splitBins;
/**
* The number of bins encountered by the INCompressor that had their
* database closed between the time they were put on the
* compressor queue and when the compressor ran.
*/
private int dbClosedBins;
/**
* The number of bins encountered by the INCompressor that had cursors
* referring to them when the compressor ran.
*/
private int cursorsBins;
/**
* The number of bins encountered by the INCompressor that were
* not actually empty when the compressor ran.
*/
private int nonEmptyBins;
/**
* The number of bins that were successfully processed by the IN
* Compressor.
*/
private int processedBins;
/**
* The number of entries in the INCompressor queue when the getStats()
* call was made.
*/
private int inCompQueueSize;
/* Evictor */
/**
* The number of passes made to the evictor.
*/
private int nEvictPasses;
/**
* The accumulated number of nodes selected to evict.
*/
private long nNodesSelected;
/**
* The accumulated number of nodes scanned in order to select the
* eviction set.
*/
private long nNodesScanned;
/**
* The accumulated number of nodes evicted.
*/
private long nNodesExplicitlyEvicted;
/**
* The number of BINs stripped by the evictor.
*/
private long nBINsStripped;
/**
* The number of bytes we need to evict in order to get under budget.
*/
private long requiredEvictBytes;
/* Checkpointer */
/**
* The total number of checkpoints run so far.
*/
private int nCheckpoints;
/**
* The Id of the last checkpoint.
*/
private long lastCheckpointId;
/**
* The accumulated number of full INs flushed to the log.
*/
private int nFullINFlush;
/**
* The accumulated number of full BINs flushed to the log.
*/
private int nFullBINFlush;
/**
* The accumulated number of Delta INs flushed to the log.
*/
private int nDeltaINFlush;
/**
* The location in the log of the last checkpoint start.
*/
private long lastCheckpointStart;
/**
* The location in the log of the last checkpoint end.
*/
private long lastCheckpointEnd;
/* Cleaner */
/** The number of files to be cleaned to reach the target utilization. */
private int cleanerBacklog;
/** The number of cleaner runs this session. */
private int nCleanerRuns;
/** The number of cleaner file deletions this session. */
private int nCleanerDeletions;
/**
* The accumulated number of INs obsolete.
*/
private int nINsObsolete;
/**
* The accumulated number of INs cleaned.
*/
private int nINsCleaned;
/**
* The accumulated number of INs that were not found in the tree anymore
* (deleted).
*/
private int nINsDead;
/**
* The accumulated number of INs migrated.
*/
private int nINsMigrated;
/**
* The accumulated number of LNs obsolete.
*/
private int nLNsObsolete;
/**
* The accumulated number of LNs cleaned.
*/
private int nLNsCleaned;
/**
* The accumulated number of LNs that were not found in the tree anymore
* (deleted).
*/
private int nLNsDead;
/**
* The accumulated number of LNs encountered that were locked.
*/
private int nLNsLocked;
/**
* The accumulated number of LNs encountered that were migrated forward
* in the log.
*/
private int nLNsMigrated;
/**
* The accumulated number of LNs that were marked for migration during
* cleaning.
*/
private int nLNsMarked;
/**
* The accumulated number of LNs processed without a tree lookup.
*/
private int nLNQueueHits;
/**
* The accumulated number of LNs processed because they were previously
* locked.
*/
private int nPendingLNsProcessed;
/**
* The accumulated number of LNs processed because they were previously
* marked for migration.
*/
private int nMarkedLNsProcessed;
/**
* The accumulated number of LNs processed because they are soon to be
* cleaned.
*/
private int nToBeCleanedLNsProcessed;
/**
* The accumulated number of LNs processed because they qualify for
* clustering.
*/
private int nClusterLNsProcessed;
/**
* The accumulated number of pending LNs that could not be locked for
* migration because of a long duration application lock.
*/
private int nPendingLNsLocked;
/**
* The accumulated number of log entries read by the cleaner.
*/
private int nCleanerEntriesRead;
/*
* Cache
*/
private long cacheDataBytes; // part of cache consumed by data, in bytes
private long nNotResident; // had to be instantiated from an LSN
private long nCacheMiss; // had to retrieve from disk
private int nLogBuffers; // number of existing log buffers
private long bufferBytes; // cache consumed by the log buffers,
// in bytes
/*
* Log activity
*/
private long nFSyncs; // Number of fsyncs issued. May be less than
// nFSyncRequests because of group commit
private long nFSyncRequests; // Number of fsyncs requested.
private long nFSyncTimeouts; // Number of group fsync requests that
// turned into singleton fsyncs.
/*
* Number of reads which had to be repeated when faulting in an
* object from disk because the read chunk size controlled by
* je.log.faultReadSize is too small.
*/
private long nRepeatFaultReads;
/*
* Number of times we have to use the temporary marshalling buffer to
* write to the log.
*/
private long nTempBufferWrites;
/*
* Number of times we try to read a log entry larger than the read
* buffer size and can't grow the log buffer to accomodate the large
* object. This happens during scans of the log during activities like
* environment open or log cleaning. Implies that the the read
* chunk size controlled by je.log.iteratorReadSize is too small.
*/
private long nRepeatIteratorReads;
/**
* Internal use only.
*/
public EnvironmentStats() {
reset();
}
/**
* Resets all stats.
*/
private void reset() {
// InCompressor
splitBins = 0;
dbClosedBins = 0;
cursorsBins = 0;
nonEmptyBins = 0;
processedBins = 0;
inCompQueueSize = 0;
// Evictor
nEvictPasses = 0;
nNodesSelected = 0;
nNodesScanned = 0;
nNodesExplicitlyEvicted = 0;
nBINsStripped = 0;
requiredEvictBytes = 0;
// Checkpointer
nCheckpoints = 0;
lastCheckpointId = 0;
nFullINFlush = 0;
nFullBINFlush = 0;
nDeltaINFlush = 0;
lastCheckpointStart = DbLsn.NULL_LSN;
lastCheckpointEnd = DbLsn.NULL_LSN;
// Cleaner
cleanerBacklog = 0;
nCleanerRuns = 0;
nCleanerDeletions = 0;
nINsObsolete = 0;
nINsCleaned = 0;
nINsDead = 0;
nINsMigrated = 0;
nLNsObsolete = 0;
nLNsCleaned = 0;
nLNsDead = 0;
nLNsLocked = 0;
nLNsMigrated = 0;
nLNsMarked = 0;
nLNQueueHits = 0;
nPendingLNsProcessed = 0;
nMarkedLNsProcessed = 0;
nToBeCleanedLNsProcessed = 0;
nClusterLNsProcessed = 0;
nPendingLNsLocked = 0;
nCleanerEntriesRead = 0;
// Cache
cacheDataBytes = 0;
nNotResident = 0;
nCacheMiss = 0;
nLogBuffers = 0;
bufferBytes = 0;
// Log
nFSyncs = 0;
nFSyncRequests = 0;
nFSyncTimeouts = 0;
nRepeatFaultReads = 0;
nTempBufferWrites = 0;
nRepeatIteratorReads = 0;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getBufferBytes() {
return bufferBytes;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getCursorsBins() {
return cursorsBins;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getDbClosedBins() {
return dbClosedBins;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getInCompQueueSize() {
return inCompQueueSize;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getLastCheckpointId() {
return lastCheckpointId;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getNCacheMiss() {
return nCacheMiss;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNCheckpoints() {
return nCheckpoints;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getCleanerBacklog() {
return cleanerBacklog;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNCleanerRuns() {
return nCleanerRuns;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNCleanerDeletions() {
return nCleanerDeletions;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNDeltaINFlush() {
return nDeltaINFlush;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getLastCheckpointEnd() {
return lastCheckpointEnd;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getLastCheckpointStart() {
return lastCheckpointStart;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNCleanerEntriesRead() {
return nCleanerEntriesRead;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNEvictPasses() {
return nEvictPasses;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getNFSyncs() {
return nFSyncs;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getNFSyncRequests() {
return nFSyncRequests;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getNFSyncTimeouts() {
return nFSyncTimeouts;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNFullINFlush() {
return nFullINFlush;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNFullBINFlush() {
return nFullBINFlush;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNINsObsolete() {
return nINsObsolete;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNINsCleaned() {
return nINsCleaned;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNINsDead() {
return nINsDead;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNINsMigrated() {
return nINsMigrated;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNLNsObsolete() {
return nLNsObsolete;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNLNsCleaned() {
return nLNsCleaned;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNLNsDead() {
return nLNsDead;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNLNsLocked() {
return nLNsLocked;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNLNsMigrated() {
return nLNsMigrated;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNLNsMarked() {
return nLNsMarked;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNLNQueueHits() {
return nLNQueueHits;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNPendingLNsProcessed() {
return nPendingLNsProcessed;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNMarkedLNsProcessed() {
return nMarkedLNsProcessed;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNToBeCleanedLNsProcessed() {
return nToBeCleanedLNsProcessed;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNClusterLNsProcessed() {
return nClusterLNsProcessed;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNPendingLNsLocked() {
return nPendingLNsLocked;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNLogBuffers() {
return nLogBuffers;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getNNodesExplicitlyEvicted() {
return nNodesExplicitlyEvicted;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getNBINsStripped() {
return nBINsStripped;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getRequiredEvictBytes() {
return requiredEvictBytes;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getNNodesScanned() {
return nNodesScanned;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getNNodesSelected() {
return nNodesSelected;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getCacheTotalBytes() {
return cacheDataBytes + bufferBytes;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getCacheDataBytes() {
return cacheDataBytes;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getNNotResident() {
return nNotResident;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNonEmptyBins() {
return nonEmptyBins;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getProcessedBins() {
return processedBins;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getNRepeatFaultReads() {
return nRepeatFaultReads;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getNTempBufferWrites() {
return nTempBufferWrites;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public long getNRepeatIteratorReads() {
return nRepeatIteratorReads;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getSplitBins() {
return splitBins;
}
/**
* Internal use only.
*/
public void setCacheDataBytes(long cacheDataBytes) {
this.cacheDataBytes = cacheDataBytes;
}
/**
* Internal use only.
*/
public void setNNotResident(long nNotResident) {
this.nNotResident = nNotResident;
}
/**
* Internal use only.
*/
public void setNCacheMiss(long nCacheMiss) {
this.nCacheMiss = nCacheMiss;
}
/**
* Internal use only.
*/
public void setNLogBuffers(int nLogBuffers) {
this.nLogBuffers = nLogBuffers;
}
/**
* Internal use only.
*/
public void setBufferBytes(long bufferBytes) {
this.bufferBytes = bufferBytes;
}
/**
* Internal use only.
*/
public void setCursorsBins(int val) {
cursorsBins = val;
}
/**
* Internal use only.
*/
public void setDbClosedBins(int val) {
dbClosedBins = val;
}
/**
* Internal use only.
*/
public void setInCompQueueSize(int val) {
inCompQueueSize = val;
}
/**
* Internal use only.
*/
public void setLastCheckpointId(long l) {
lastCheckpointId = l;
}
/**
* Internal use only.
*/
public void setNCheckpoints(int val) {
nCheckpoints = val;
}
/**
* Internal use only.
*/
public void setCleanerBacklog(int val) {
cleanerBacklog = val;
}
/**
* Internal use only.
*/
public void setNCleanerRuns(int val) {
nCleanerRuns = val;
}
/**
* Internal use only.
*/
public void setNCleanerDeletions(int val) {
nCleanerDeletions = val;
}
/**
* Internal use only.
*/
public void setNDeltaINFlush(int val) {
nDeltaINFlush = val;
}
/**
* Internal use only.
*/
public void setLastCheckpointEnd(long lsn) {
lastCheckpointEnd = lsn;
}
/**
* Internal use only.
*/
public void setLastCheckpointStart(long lsn) {
lastCheckpointStart = lsn;
}
/**
* Internal use only.
*/
public void setNCleanerEntriesRead(int val) {
nCleanerEntriesRead = val;
}
/**
* Internal use only.
*/
public void setNEvictPasses(int val) {
nEvictPasses = val;
}
/**
* Internal use only.
*/
public void setNFSyncs(long val) {
nFSyncs = val;
}
/**
* Internal use only.
*/
public void setNFSyncRequests(long val) {
nFSyncRequests = val;
}
/**
* Internal use only.
*/
public void setNFSyncTimeouts(long val) {
nFSyncTimeouts = val;
}
/**
* Internal use only.
*/
public void setNFullINFlush(int val) {
nFullINFlush = val;
}
/**
* Internal use only.
*/
public void setNFullBINFlush(int val) {
nFullBINFlush = val;
}
/**
* Internal use only.
*/
public void setNINsObsolete(int val) {
nINsObsolete = val;
}
/**
* Internal use only.
*/
public void setNINsCleaned(int val) {
nINsCleaned = val;
}
/**
* Internal use only.
*/
public void setNINsDead(int val) {
nINsDead = val;
}
/**
* Internal use only.
*/
public void setNINsMigrated(int val) {
nINsMigrated = val;
}
/**
* Internal use only.
*/
public void setNLNsObsolete(int val) {
nLNsObsolete = val;
}
/**
* Internal use only.
*/
public void setNLNsCleaned(int val) {
nLNsCleaned = val;
}
/**
* Internal use only.
*/
public void setNLNsDead(int val) {
nLNsDead = val;
}
/**
* Internal use only.
*/
public void setNLNsLocked(int val) {
nLNsLocked = val;
}
/**
* Internal use only.
*/
public void setNLNsMigrated(int val) {
nLNsMigrated = val;
}
/**
* Internal use only.
*/
public void setNLNsMarked(int val) {
nLNsMarked = val;
}
/**
* Internal use only.
*/
public void setNLNQueueHits(int val) {
nLNQueueHits = val;
}
/**
* Internal use only.
*/
public void setNPendingLNsProcessed(int val) {
nPendingLNsProcessed = val;
}
/**
* Internal use only.
*/
public void setNMarkedLNsProcessed(int val) {
nMarkedLNsProcessed = val;
}
/**
* Internal use only.
*/
public void setNToBeCleanedLNsProcessed(int val) {
nToBeCleanedLNsProcessed = val;
}
/**
* Internal use only.
*/
public void setNClusterLNsProcessed(int val) {
nClusterLNsProcessed = val;
}
/**
* Internal use only.
*/
public void setNPendingLNsLocked(int val) {
nPendingLNsLocked = val;
}
/**
* Internal use only.
*/
public void setNNodesExplicitlyEvicted(long l) {
nNodesExplicitlyEvicted = l;
}
/**
* Internal use only.
*/
public void setRequiredEvictBytes(long l) {
requiredEvictBytes = l;
}
/**
* Internal use only.
*/
public void setNBINsStripped(long l) {
nBINsStripped = l;
}
/**
* Internal use only.
*/
public void setNNodesScanned(long l) {
nNodesScanned = l;
}
/**
* Internal use only.
*/
public void setNNodesSelected(long l) {
nNodesSelected = l;
}
/**
* Internal use only.
*/
public void setNonEmptyBins(int val) {
nonEmptyBins = val;
}
/**
* Internal use only.
*/
public void setProcessedBins(int val) {
processedBins = val;
}
/**
* Internal use only.
*/
public void setNRepeatFaultReads(long val) {
nRepeatFaultReads = val;
}
/**
* Internal use only.
*/
public void setNTempBufferWrites(long val) {
nTempBufferWrites = val;
}
/**
* Internal use only.
*/
public void setNRepeatIteratorReads(long val) {
nRepeatIteratorReads = val;
}
/**
* Internal use only.
*/
public void setSplitBins(int val) {
splitBins = val;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("splitBins=").append(splitBins).append('\n');
sb.append("dbClosedBins=").append(dbClosedBins).append('\n');
sb.append("cursorsBins=").append(cursorsBins).append('\n');
sb.append("nonEmptyBins=").append(nonEmptyBins).append('\n');
sb.append("processedBins=").append(processedBins).append('\n');
sb.append("inCompQueueSize=").append(inCompQueueSize).append('\n');
// Evictor
sb.append("nEvictPasses=").append(nEvictPasses).append('\n');
sb.append("nNodesSelected=").append(nNodesSelected).append('\n');
sb.append("nNodesScanned=").append(nNodesScanned).append('\n');
sb.append("nNodesExplicitlyEvicted=").
append(nNodesExplicitlyEvicted).append('\n');
sb.append("nBINsStripped=").append(nBINsStripped).append('\n');
sb.append("requiredEvictBytes=").append(requiredEvictBytes).
append('\n');
// Checkpointer
sb.append("nCheckpoints=").append(nCheckpoints).append('\n');
sb.append("lastCheckpointId=").append(lastCheckpointId).append('\n');
sb.append("nFullINFlush=").append(nFullINFlush).append('\n');
sb.append("nFullBINFlush=").append(nFullBINFlush).append('\n');
sb.append("nDeltaINFlush=").append(nDeltaINFlush).append('\n');
sb.append("lastCheckpointStart=").
append(DbLsn.getNoFormatString(lastCheckpointStart)).append('\n');
sb.append("lastCheckpointEnd=").
append(DbLsn.getNoFormatString(lastCheckpointEnd)).append('\n');
// Cleaner
sb.append("cleanerBacklog=").append(cleanerBacklog).append('\n');
sb.append("nCleanerRuns=").append(nCleanerRuns).append('\n');
sb.append("nCleanerDeletions=").append(nCleanerDeletions).append('\n');
sb.append("nINsObsolete=").append(nINsObsolete).append('\n');
sb.append("nINsCleaned=").append(nINsCleaned).append('\n');
sb.append("nINsDead=").append(nINsDead).append('\n');
sb.append("nINsMigrated=").append(nINsMigrated).append('\n');
sb.append("nLNsObsolete=").append(nLNsObsolete).append('\n');
sb.append("nLNsCleaned=").append(nLNsCleaned).append('\n');
sb.append("nLNsDead=").append(nLNsDead).append('\n');
sb.append("nLNsLocked=").append(nLNsLocked).append('\n');
sb.append("nLNsMigrated=").append(nLNsMigrated).append('\n');
sb.append("nLNsMarked=").append(nLNsMarked).append('\n');
sb.append("nLNQueueHits=").
append(nLNQueueHits).append('\n');
sb.append("nPendingLNsProcessed=").
append(nPendingLNsProcessed).append('\n');
sb.append("nMarkedLNsProcessed=").
append(nMarkedLNsProcessed).append('\n');
sb.append("nToBeCleanedLNsProcessed=").
append(nToBeCleanedLNsProcessed).append('\n');
sb.append("nClusterLNsProcessed=").
append(nClusterLNsProcessed).append('\n');
sb.append("nPendingLNsLocked=").
append(nPendingLNsLocked).append('\n');
sb.append("nCleanerEntriesRead=").
append(nCleanerEntriesRead).append('\n');
// Cache
sb.append("nNotResident=").append(nNotResident).append('\n');
sb.append("nCacheMiss=").append(nCacheMiss).append('\n');
sb.append("nLogBuffers=").append(nLogBuffers).append('\n');
sb.append("bufferBytes=").append(bufferBytes).append('\n');
sb.append("cacheDataBytes=").append(cacheDataBytes).append('\n');
sb.append("cacheTotalBytes=").append(getCacheTotalBytes()).
append('\n');
sb.append("nFSyncs=").append(nFSyncs).append('\n');
sb.append("nFSyncRequests=").append(nFSyncRequests).append('\n');
sb.append("nFSyncTimeouts=").append(nFSyncTimeouts).append('\n');
sb.append("nRepeatFaultReads=").append(nRepeatFaultReads).append('\n');
sb.append("nTempBufferWrite=").append(nTempBufferWrites).append('\n');
sb.append("nRepeatIteratorReads=").
append(nRepeatIteratorReads).append('\n');
return sb.toString();
}
}